Système de Backup Automatique avec Raspberry Pi et Électronique
Ce projet allie programmation, électronique et Raspberry Pi pour créer un système de sauvegarde interactif et éducatif, parfait pour les débutants !
Matériel Requis
- Raspberry Pi avec Raspberry Pi OS installé
- Un bouton poussoir
- Une LED RGB
- Un buzzer
- Un écran OLED (I2C, 128x64)
- Un capteur de température (DS18B20 ou équivalent)
- Fils de connexion, breadboard et résistances (330 Ω, 10 kΩ)
Schéma de Connexion
- Bouton poussoir : relié à un GPIO avec une résistance de pull-down (10 kΩ).
- LED RGB : connectée à trois GPIO avec des résistances de 330 Ω.
- Buzzer : connecté à un GPIO.
- Écran OLED : connecté aux broches SDA et SCL du Raspberry Pi.
- Capteur de température : connecté à un GPIO avec une résistance de pull-up (4,7 kΩ).
Installation des Bibliothèques
Ajoutez les bibliothèques pour gérer l'écran OLED et le capteur de température :
sudo apt-get install python3-pip
pip3 install adafruit-circuitpython-ssd1306 adafruit-blinka w1thermsensor
Script Python
Voici un script amélioré pour inclure l'écran OLED et le capteur de température :
import RPi.GPIO as GPIO
import subprocess
import time
from w1thermsensor import W1ThermSensor
from adafruit_ssd1306 import SSD1306_I2C
from board import SCL, SDA
import busio
from PIL import Image, ImageDraw, ImageFont
# GPIO setup
BUTTON_PIN = 17
RED_LED = 22
GREEN_LED = 27
BLUE_LED = 18
BUZZER_PIN = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(BLUE_LED, GPIO.OUT)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
# OLED setup
i2c = busio.I2C(SCL, SDA)
oled = SSD1306_I2C(128, 64, i2c)
font = ImageFont.load_default()
# Capteur de température
sensor = W1ThermSensor()
def display_message(message):
image = Image.new("1", (128, 64))
draw = ImageDraw.Draw(image)
draw.text((0, 0), message, font=font, fill=255)
oled.image(image)
oled.show()
def backup():
try:
display_message("Backup en cours...")
GPIO.output(GREEN_LED, GPIO.HIGH)
start_time = time.time()
subprocess.run(["rsync", "-av", "--delete", "/chemin/vers/dossier", "/mnt/backup"])
GPIO.output(GREEN_LED, GPIO.LOW)
elapsed_time = time.time() - start_time
display_message(f"Backup OK\nTemps : {elapsed_time:.2f}s")
except Exception as e:
GPIO.output(RED_LED, GPIO.HIGH)
display_message(f"Erreur : {e}")
time.sleep(2)
GPIO.output(RED_LED, GPIO.LOW)
def check_temperature():
temp = sensor.get_temperature()
if temp > 70: # Température critique
GPIO.output(RED_LED, GPIO.HIGH)
display_message(f"Temp élevée: {temp:.1f}C")
else:
display_message(f"Temp : {temp:.1f}C")
time.sleep(2)
def button_callback(channel):
GPIO.output(BLUE_LED, GPIO.HIGH)
backup()
GPIO.output(BLUE_LED, GPIO.LOW)
check_temperature()
GPIO.add_event_detect(BUTTON_PIN, GPIO.RISING, callback=button_callback, bouncetime=200)
display_message("Système prêt.")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
Utilisation
Le système affichera l'état du backup sur l'écran OLED et signalera toute température critique. Appuyez sur le bouton pour lancer manuellement une sauvegarde.
Résumé
Ce projet est idéal pour découvrir l'intégration d'électronique et de programmation. Il allie apprentissage et fonctionnalité, tout en offrant un système robuste de sauvegarde.